package com.talent.jiwen;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Environment;
import android.text.InputType;
import android.view.View;
import android.widget.Toast;

import com.abc.live.ABCLiveUIHelp;
import com.abcpen.core.define.ABCConstants;
import com.abcpen.open.api.model.RoomMo;
import com.afollestad.materialdialogs.GravityEnum;
import com.afollestad.materialdialogs.MaterialDialog;
import com.liulishuo.filedownloader.FileDownloader;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.entity.LocalMedia;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.talent.jiwen.base.BaseActivity;
import com.talent.jiwen.chatlive.InteractiveActivity;
import com.talent.jiwen.http.common.UpdateAppHttpUtil;
import com.talent.jiwen.util.LogUtil;
import com.talent.jiwen.util.SPUtil;
import com.vector.update_app.UpdateAppBean;
import com.vector.update_app.UpdateAppManager;
import com.vector.update_app.UpdateCallback;
import com.vector.update_app.listener.IUpdateDialogFragmentListener;
import com.vector.update_app.utils.AppUpdateUtils;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import butterknife.BindView;
import butterknife.OnClick;

import static com.abcpen.open.api.ABCOpenConstants.HOST_TYPE;

public class MainActivity extends BaseActivity {


    @BindView(R.id.refreshLayout)
    RefreshLayout refreshLayout;


    @Override
    protected void initData() {
        setHeadVisibility(View.VISIBLE);
        FileDownloader.setup(mContext);

        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
            }
        });
        refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
            }
        });

//        showUpdate();

    }




    private void showUpdate(){

        String path = Environment.getExternalStorageDirectory().getAbsolutePath();
        Map<String, String> params = new HashMap<String, String>();
        params.put("application_type", "2");

        new UpdateAppManager
                .Builder()
                //必须设置，当前Activity
                .setActivity(this)
                //必须设置，实现httpManager接口的对象
                .setHttpManager(new UpdateAppHttpUtil())
                //必须设置，更新地址
                .setUpdateUrl("abcd")
                //以下设置，都是可选
                //设置请求方式，默认get
                .setPost(true)
                //添加自定义参数，默认version=1.0.0（app的versionName）；apkKey=唯一表示（在AndroidManifest.xml配置）
                .setParams(params)
                //设置点击升级后，消失对话框，默认点击升级后，对话框显示下载进度
//                .hideDialogOnDownloading()
                //设置头部，不设置显示默认的图片，设置图片后自动识别主色调，然后为按钮，进度条设置颜色
                .setTopPic(R.mipmap.top_3)
                //为按钮，进度条设置颜色，默认从顶部图片自动识别。
                //.setThemeColor(ColorUtil.getRandomColor())
                //设置apk下砸路径，默认是在下载到sd卡下/Download/1.0.0/test.apk
                .setTargetPath(path)
                //设置appKey，默认从AndroidManifest.xml获取，如果，使用自定义参数，则此项无效
                //.setAppKey("ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f")
                //不显示通知栏进度条
                .dismissNotificationProgress()
                //是否忽略版本
                //.showIgnoreVersion()
                .setUpdateDialogFragmentListener(new IUpdateDialogFragmentListener() {
                    @Override
                    public void onUpdateNotifyDialogCancel(UpdateAppBean updateApp) {
                        //用户点击关闭按钮，取消了更新，如果是下载完，用户取消了安装，则可以在 onActivityResult 监听到。

                    }
                })
                .build()
                //检测是否有新版本
                .checkNewApp(new UpdateCallback() {
                    /**
                     * 解析json,自定义协议
                     *
                     * @param json 服务器返回的json
                     * @return UpdateAppBean
                     */
                    @Override
                    protected UpdateAppBean parseJson(String json) {
                        UpdateAppBean updateAppBean = new UpdateAppBean();
                        try {
                            JSONObject jsonObject = new JSONObject(json);
                            updateAppBean
                                    //（必须）是否更新Yes,No
                                    .setUpdate(jsonObject.optString("update"))
                                    //（必须）新版本号，
                                    .setNewVersion(jsonObject.optString("new_version"))
                                    //（必须）下载地址
                                    .setApkFileUrl(jsonObject.optString("apk_file_url"))
                                    //（必须）更新内容
                                    .setUpdateLog(jsonObject.optString("update_log"))
                                    //大小，不设置不显示大小，可以不设置
                                    .setTargetSize(jsonObject.optString("target_size"))
                                    //是否强制更新，可以不设置
                                    .setConstraint(false)
                                    //设置md5，可以不设置
                                    .setNewMd5(jsonObject.optString("new_md51"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        return updateAppBean;
                    }

                    @Override
                    protected void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) {
                        updateAppManager.showDialogFragment();
                    }

                    /**
                     * 网络请求之前
                     */
                    @Override
                    public void onBefore() {
//                        CProgressDialogUtils.showProgressDialog(LoginActivity.this);
                    }

                    /**
                     * 网路请求之后
                     */
                    @Override
                    public void onAfter() {
//                        CProgressDialogUtils.cancelProgressDialog(LoginActivity.this);
                    }
//
                    /**
                     * 没有新版本
                     */
                    @Override
                    public void noNewApp(String error) {

//                        Toast.makeText(SplashActivity.this, "没有新版本", Toast.LENGTH_SHORT).show();
                    }
                });

    }



    /**
     * 静默下载，下载完才弹出升级界面
     *
     */
//    public void silenceUpdateApp() {
//        new UpdateAppManager
//                .Builder()
//                //当前Activity
//                .setActivity(this)
//                .setPost(true)
//                //更新地址
//                .setUpdateUrl("abcd")
//                //实现httpManager接口的对象
//                .setHttpManager(new UpdateAppHttpUtil())
//                //只有wifi下进行，静默下载(只对静默下载有效)
//                .setOnlyWifi()
//                .build()
//                .silenceUpdate();
//    }




    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        LogUtil.e( "onActivityResult() called with: requestCode = [" + requestCode + "], resultCode = [" + resultCode + "], data = [" + data + "]");
        switch (resultCode) {
            case Activity.RESULT_CANCELED:
                switch (requestCode){
                    // 得到通过UpdateDialogFragment默认dialog方式安装，用户取消安装的回调通知，以便用户自己去判断，比如这个更新如果是强制的，但是用户下载之后取消了，在这里发起相应的操作
                    case AppUpdateUtils.REQ_CODE_INSTALL_APP:
                        Toast.makeText(this,"您取消了安装包的更新", Toast.LENGTH_LONG).show();
                        break;
                }
                break;
        }

        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case PictureConfig.CHOOSE_REQUEST:
                    // 图片、视频、音频选择结果回调
                    List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);

                    showToast("选中了 "+selectList.size()+" 张图片");
                    // 例如 LocalMedia 里面返回三种path
                    // 1.media.getPath(); 为原图path
                    // 2.media.getCutPath();为裁剪后path，需判断media.isCut();是否为true  注意：音视频除外
                    // 3.media.getCompressPath();为压缩后path，需判断media.isCompressed();是否为true  注意：音视频除外
                    // 如果裁剪并压缩了，以取压缩路径为准，因为是先裁剪后压缩的
//                    adapter.setList(selectList);
//                    adapter.notifyDataSetChanged();
                    break;
            }
        }
    }

    String [] items=new String[]{"一年级", "八年级", "九年级","七年级", "八年级", "九年级","七年级", "八年级", "九年级","七年级", "八年级", "九年级","七年级", "八年级", "九年级"};


    @OnClick({R.id.bt_1,R.id.bt_2,R.id.bt_3,R.id.bt_4,R.id.bt_5,R.id.bt_6,R.id.bt_7,R.id.bt_8,R.id.bt_9,R.id.bt_10,R.id.bt_11})
    void onViewClick(View view) {
        switch (view.getId()){
            case R.id.bt_1:
//                new MaterialDialog.Builder(this)
//                        .title(R.string.title)
//                        .content(R.string.content)
//                        .positiveText(R.string.agree)
//                        .negativeText(R.string.disagree)
//                        .show();
                showClassDialog();

//                TrainingActivity.startTrainingActivity(MainActivity.this);

                break;
            case R.id.bt_2:
                new MaterialDialog.Builder(this)
                        .title(R.string.title)
                        .content(R.string.content)
                        .positiveText(R.string.agree)
                        .negativeText(R.string.disagree)
                        .neutralText(R.string.more_info)
                        .show();

                MaterialDialog mMaterialDialog;
                MaterialDialog.Builder  mBuilder = new MaterialDialog.Builder(MainActivity.this);
                mBuilder.title("选择年级");
                mBuilder.titleGravity(GravityEnum.CENTER);
                mBuilder.itemsGravity(GravityEnum.CENTER);
                mBuilder.titleColor(Color.parseColor("#000000"));
                mBuilder.items(items);
                mBuilder.autoDismiss(true);
                mBuilder.itemsCallback(new MaterialDialog.ListCallback() {
                    @Override
                    public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
                        Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
                    }
                });
                mMaterialDialog = mBuilder.build();
                mMaterialDialog.show();

//                WrongBookActivity.startWrongBookActivity(MainActivity.this);
                break;
            case R.id.bt_3:
                new MaterialDialog.Builder(this)
                        .title(R.string.title)
                        .items(items)
                        .itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() {
                            @Override
                            public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
                                /**
                                 * If you use alwaysCallSingleChoiceCallback(), which is discussed below,
                                 * returning false here won't allow the newly selected radio button to actually be selected.
                                 **/
                                return true;
                            }
                        })
                        .positiveText(R.string.agree)
                        .show();
                break;
            case R.id.bt_4:
                new MaterialDialog.Builder(this)
                        .title(R.string.title)
                        .items(items)
                        .itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() {
                            @Override
                            public boolean onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) {
                                /**
                                 * If you use alwaysCallMultiChoiceCallback(), which is discussed below,
                                 * returning false here won't allow the newly selected check box to actually be selected
                                 * (or the newly unselected check box to be unchecked).
                                 * See the limited multi choice dialog example in the sample project for details.
                                 **/
                                return true;
                            }
                        })
                        .positiveText(R.string.agree)
                        .show();
                break;
            case R.id.bt_5:
                new MaterialDialog.Builder(this)
                        .title("Use Google's Location Services?")
                        .content("Let Google help apps determine location. This means sending anonymous location data to Google, even when no apps are running.")
                        .positiveText("Agree")
                        .showListener(new DialogInterface.OnShowListener() {
                            @Override
                            public void onShow(DialogInterface dialog) {
                            }
                        })
                        .cancelListener(new DialogInterface.OnCancelListener() {
                            @Override
                            public void onCancel(DialogInterface dialog) {
                            }
                        })
                        .dismissListener(new DialogInterface.OnDismissListener() {
                            @Override
                            public void onDismiss(DialogInterface dialog) {
                            }
                        })
                        .show();
                break;
            case R.id.bt_6:
                new MaterialDialog.Builder(this)
                    .title("输入")
                    .content("请输入您的名字")
                    .inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
                    .input(R.string.input_hint, R.string.input_prefill, new MaterialDialog.InputCallback() {
                        @Override
                        public void onInput(MaterialDialog dialog, CharSequence input) {
                            // Do something
                        }
                    }).show();
                break;
            case R.id.bt_7://test 照片

              // 进入相册 以下是例子：用不到的api可以不写
                PictureSelector.create(MainActivity.this)
                        .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
                        .theme(R.style.picture_default_style)//主题样式(不设置为默认样式) 也可参考demo values/styles下 例如：R.style.picture.white.style
                        .maxSelectNum(9)// 最大图片选择数量 int
                        .minSelectNum(2)// 最小选择数量 int
                        .imageSpanCount(4)// 每行显示个数 int
                        .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
                        .previewImage(true)// 是否可预览图片 true or false
                        .previewVideo(false)// 是否可预览视频 true or false
                        .enablePreviewAudio(false) // 是否可播放音频 true or false
                        .isCamera(true)// 是否显示拍照按钮 true or false
                        .imageFormat(PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg
                        .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
                        .sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
                        .setOutputCameraPath("/CustomPath")// 自定义拍照保存路径,可不填
                        .enableCrop(true)// 是否裁剪 true or false
                        .compress(true)// 是否压缩 true or false
//                        .glideOverride()// int glide 加载宽高，越小图片列表越流畅，但会影响列表图片浏览的清晰度
//                        .withAspectRatio()// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
                        .hideBottomControls(false)// 是否显示uCrop工具栏，默认不显示 true or false
                        .isGif(false)// 是否显示gif图片 true or false
//                        .compressSavePath(getPath())//压缩图片保存地址
                        .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false
                        .circleDimmedLayer(false)// 是否圆形裁剪 true or false
                        .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
                        .showCropGrid(true)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
                        .openClickSound(false)// 是否开启点击声音 true or false
//                        .selectionMedia()// 是否传入已选图片 List<LocalMedia> list
                        .previewEggs(true)// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false
                        .cropCompressQuality(80)// 裁剪压缩质量 默认90 int
                        .minimumCompressSize(100)// 小于100kb的图片不压缩
                        .synOrAsy(true)//同步true或异步false 压缩 默认同步
//                        .cropWH()// 裁剪宽高比，设置如果大于图片本身宽高则无效 int
                        .rotateEnabled(false) // 裁剪是否可旋转图片 true or false
                        .scaleEnabled(false)// 裁剪是否可放大缩小图片 true or false
//                        .videoQuality()// 视频录制质量 0 or 1 int
//                        .videoMaxSecond(15)// 显示多少秒以内的视频or音频也可适用 int
//                        .videoMinSecond(10)// 显示多少秒以内的视频or音频也可适用 int
//                        .recordVideoSecond()//视频秒数录制 默认60s int
                        .isDragFrame(true)// 是否可拖动裁剪框(固定)
                        .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code


                break;
            case R.id.bt_8:
                SPUtil.clearAll();
//                DemoCache.clear();
                intentActivity(LoginActivity.class);
                finish();
//               intentActivity(SelectFileActivity.class);
                break;
            case R.id.bt_9:
//                loginWY();
//                doLogin();
                intentActivity(TestVideoActivity.class);
                break;
            case R.id.bt_10://创建房间
//                registerObservers(true);
//                isCreate=true;
//                intentActivity(EnterRoomActivity.class);
//                goLive();


                break;
            case R.id.bt_11://进入房间
//                registerObservers(true);
//                isCreate=false;
//                intentActivity(EnterRoomActivity.class);

                goLive();
                break;

        }
    }


    public void goLive() {
        String rid = "100";
//        App.uid="1235";
//        App.uname="吴学生";
        int liveType = 2;

//        if (!TextUtils.isEmpty(rid)) {
//            if (!liveRadio.isChecked()) {
//                liveType = 2;//互动
//            } else {
//                liveType = 1;//直播
//            }
//
//            if (rbHost.isChecked()) {
//                roleType = ABCConstants.HOST_TYPE;//老师
//            } else {
                roleType = ABCConstants.USER_OTHER;//学生
//            }

            ABCLiveUIHelp uiHelp = ABCLiveUIHelp.init()
                    .setUserID(SPUtil.getBSUId())
                    .setUserName(SPUtil.getUserName())
                    .setIsManager(isManager)
                    .setDefaultOpenCamera(true)
                    .setDefaultOpenMic(true);

            RoomMo roomMo = new RoomMo();
            roomMo.room_id = rid;
            roomMo.name = rid;
            roomMo.live_type = liveType;

            startLiveActivity(uiHelp, roomMo);
//        } else {
//            AToastUtils.showShort("RoomId  不能为空");
//        }
    }


    private boolean isManager = false;
    private boolean isRecording = false;
    private int roleType = ABCConstants.USER_OTHER;

    /**
     * Room 基本废弃掉  可以自行更改
     *
     * @param uiHelp
     * @param roomMo
     */
    public void startLiveActivity(ABCLiveUIHelp uiHelp, RoomMo roomMo) {
        ABCLiveUIHelp abcLiveUIHelp = uiHelp.setIsShowGuide(false);
        abcLiveUIHelp.setIsManager(isManager);
        roomMo.isRecord = isRecording ? 1 : 2;
        abcLiveUIHelp.setUserIconDefault(R.drawable.abc_default_icon);
        abcLiveUIHelp.setUserAvatarUrl("https://i.stack.imgur.com/6oAtB.png");
//        abcLiveUIHelp.setEndTime(System.currentTimeMillis() + 45 * 1000);
        abcLiveUIHelp.setStartTime(System.currentTimeMillis() + 10 * 1000);
        if (roleType != HOST_TYPE) {//学生
            if (roomMo.live_type == 1) {//直播
//                abcLiveUIHelp.setRoleType(isManager ? ABCConstants.MANAGER_TYPE : ABCConstants.NONE_TYPE);
//                abcLiveUIHelp.startPlayLivingActivity(this, roomMo, PlayActivity.class);
            } else {//互动
                abcLiveUIHelp.setRoleType(isManager ? ABCConstants.MANAGER_TYPE : ABCConstants.NONE_TYPE);
                abcLiveUIHelp.startInteractiveLiveActivity(this, roomMo, InteractiveActivity.class);
            }
        } else {//老师
            if (roomMo.live_type == 1) {//直播
//                abcLiveUIHelp.setRoleType(ABCConstants.HOST_TYPE);
//                abcLiveUIHelp.startLivingActivity(this, roomMo, LivingActivity.class);
            } else {//互动
                abcLiveUIHelp.setRoleType(ABCConstants.HOST_TYPE);
                abcLiveUIHelp.startInteractiveLiveActivity(this, roomMo, InteractiveActivity.class);
            }
        }
    }




//    private void registerObservers(boolean register) {
//        NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, register);
//    }
//
//    Observer<StatusCode> userStatusObserver = new Observer<StatusCode>() {
//        @Override
//        public void onEvent(StatusCode statusCode) {
//            if (statusCode.wontAutoLogin()) {
////                LogoutHelper.logout(IdentifyActivity.this, true);
//            }
//        }
//    };


    /**
     * 测试登录
     */
//    public void doLogin() {
//
//        final String account = DemoCache.getAccount();
//        final String token = SPUtil.stringOut(SPConstant.NIM_TOKEN);
//        LoginInfo info = new LoginInfo(account,token); // config...
//        RequestCallback<LoginInfo> callback =
//                new RequestCallback<LoginInfo>() {
//                    @Override
//                    public void onSuccess(LoginInfo loginInfo) {
//                        LogUtil.e("wangyi==== login success"+loginInfo.toString());
//
//                    }
//
//                    @Override
//                    public void onFailed(int i) {
//                        LogUtil.e("onFailed==== "+i);
//                    }
//
//                    @Override
//                    public void onException(Throwable throwable) {
//                        LogUtil.e("onException==== "+throwable.toString());
//                    }
//                    // 可以在此保存LoginInfo到本地，下次启动APP做自动登录用
//                };
//        NIMClient.getService(AuthService.class).login(info)
//                .setCallback(callback);
//    }

//    private AbortableFuture<LoginInfo> loginRequest;

//    private void loginWY() {
//
//        final String account = "qyqx1234";
//        final String token = tokenFromPassword("123456");
//        // 登录
//        loginRequest = NIMClient.getService(AuthService.class).login(new LoginInfo(account, token));
//        loginRequest.setCallback(new RequestCallback<LoginInfo>() {
//            @Override
//            public void onSuccess(LoginInfo param) {
//                LogUtil.e("wangyi==== login success");
//
//                showToast("登录成功");
////                onLoginDone();
//                DemoCache.setAccount(account);
//                saveLoginInfo(account, token);
//
//                // 初始化消息提醒
//                NIMClient.toggleNotification(UserPreferences.getNotificationToggle());
//
//                // 初始化免打扰
//                NIMClient.updateStatusBarNotificationConfig(UserPreferences.getStatusConfig());
//
//                // 进入主界面
////                startActivity(new Intent(MainActivity.this, IdentifyActivity.class));
//                finish();
//            }

//            @Override
//            public void onFailed(int code) {
////                onLoginDone();
//                if (code == 302 || code == 404) {
//                    Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
//                } else {
//                    Toast.makeText(MainActivity.this, "登录失败: " + code, Toast.LENGTH_SHORT).show();
//                }
//            }
//
//            @Override
//            public void onException(Throwable exception) {
//                LogUtil.e(exception.toString());
////                onLoginDone();
//            }
//        });
//    }


    //DEMO中使用 username 作为 NIM 的account ，md5(password) 作为 token
    //开发者需要根据自己的实际情况配置自身用户系统和 NIM 用户系统的关系
//    private String tokenFromPassword(String password) {
//        return MD5.getStringMD5(password);
//    }
//
//    private void saveLoginInfo(final String account, final String token) {
//        AuthPreferences.saveUserAccount(account);
//        AuthPreferences.saveUserToken(token);
//    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
//        registerObservers(false);
    }

    @Override
    protected int provideContentViewId() {
        return R.layout.activity_main;
    }

    @Override
    public String titleName() {
        return null;
    }


}
